package www.nomina.model.dao;

import java.sql.SQLException;
import java.util.ArrayList;
import www.nomina.controller.beans.departamentoBean;

public class departamentosDao extends nominaDao {

	private ArrayList<departamentoBean> listadepartamento = new ArrayList<>();
	departamentoBean depto = new departamentoBean();

	/**
	 * @author Men's
	 * @category Modulo Departameno Metodo para el Alta el Departamento
	 * @param Bean
	 *            Precargado con los datos del Departamento
	 * @return ningun valor
	 * @since 27 de enero del 2014
	 */

	public ArrayList<departamentoBean> getCatalgo() throws Exception {
		System.out.println("(PuestoDAO.getCatalgo)...............execute");
		StringBuilder query = new StringBuilder();
		ArrayList<departamentoBean> result = new ArrayList<departamentoBean>();
		try {
			query.append("select * FROM Departamento");

			System.out.println("(PuestoDAO.getCatalgo):------->"
					+ query.toString());
			conn = this.getConnectionMYSQL();
			ps = conn.prepareStatement(query.toString());
			rs = ps.executeQuery();
			departamentoBean vo;

			while (rs.next()) {

				vo = new departamentoBean();

				vo.setId_departamento(rs.getInt("id_departamento"));
				vo.setDepartamento(rs.getString("departamento"));
				vo.setDescripcion(rs.getString("descripcion"));
				result.add(vo);
			}

		} catch (SQLException error) {
			throw new Exception(error.getMessage());
		} catch (Exception error) {
			throw new Exception(error.getMessage());
		}

		return result;
	}

	public departamentoBean getDeptoId(int id) throws Exception {
		System.out
				.println("(DepartamentoDAO.getUsuario)...............execute");

		StringBuilder query = new StringBuilder();
		departamentoBean depto = new departamentoBean();
		try {
			query.append("select ").append("* ").append("from ")
					.append("Departamento ").append("Where ")
					.append("id_departamento='").append(id).append("'");

			System.out.println("(PuestoDAO.getUsuario):------->"
					+ query.toString());
			conn = this.getConnectionMYSQL();
			ps = conn.prepareStatement(query.toString());
			rs = ps.executeQuery();

			if (rs.next()) {
				depto.setId_departamento(rs.getInt("id_departamento"));
				depto.setDepartamento(rs.getString("departamento"));
				depto.setDescripcion(rs.getString("descripcion"));
				System.out.println("Departamento encontrado");
			} else {
				throw new Exception("Error Puesto no existe.");
			}

		} catch (SQLException error) {
			throw new Exception(error.getMessage());
		} catch (Exception error) {
			throw new Exception(error.getMessage());

		}
		return depto;
	}

	public ArrayList<departamentoBean> traerdepartamento() {
		listadepartamento = new ArrayList<departamentoBean>();

		try {
			String query = "SELECT * FROM Departamento";

			System.out
					.println("(EmpresaDAOjalando empresa combobox.getUsuario):------->"
							+ query.toString());
			conn = this.getConnectionMYSQL();
			ps = conn.prepareStatement(query.toString());
			rs = ps.executeQuery();

			while (rs.next()) {

				depto = new departamentoBean();
				depto.setId_departamento(rs.getInt("id_departamento"));
				depto.setDepartamento(rs.getString("departamento"));
				listadepartamento.add(depto);
			}
		} catch (Exception e) {
			// TODO: handle exception
		}
		return listadepartamento;

	}

	public void insertDepartamento(departamentoBean registro) throws Exception {
		StringBuilder query = new StringBuilder();
		try {
			query.append("INSERT INTO departamento ")
					.append("(id_usuario,departamento, descripcion) ")
					.append("values ('").append(registro.getId_usuario())
					.append("','").append(registro.getDepartamento())
					.append("','").append(registro.getDescripcion())
					.append("');");

			conn = this.getConnectionMYSQL();
			st = conn.createStatement();
			System.out.println(query.toString());
			st.executeUpdate(query.toString());

		} catch (SQLException error) {
			throw new Exception(error.getMessage());
		} catch (Exception error) {
			throw new Exception(error.getMessage());
		} finally {
			close(st);
			close(conn);
		}
	}

	/**
	 * @author Men's
	 * @category Modulo Departamento Metodo para la validacion del nombre del
	 *           departamento y evitar duplicacion
	 * @param Bean
	 *            Precargado con los datos del usuario
	 * @return true or false si existe el nombre de usuario
	 * @since 27 de enero del 2014
	 */
	public boolean validarDepartamento(departamentoBean registro)
			throws Exception {
		StringBuilder query = new StringBuilder();
		boolean resp = false;

		try {
			query.append(
					"select Departamento from departamento Where departamento='")
					.append(registro.getDepartamento()).append("'");

			conn = this.getConnectionMYSQL();
			ps = conn.prepareStatement(query.toString());
			rs = ps.executeQuery();

			if (rs.next()) {
				resp = true;
			} else {
				resp = false;
			}

		} catch (SQLException error) {
			throw new Exception(error.getMessage());
		} catch (Exception error) {
			throw new Exception(error.getMessage());
		} finally {
			close(conn);
			close(ps);
			close(rs);
		}
		return resp;
	}

	/**
	 * @author Men's
	 * @category Modulo Departamento Metodo para actualizar los departamentos
	 * @param Bean
	 *            precargado con los datos actualizados del usuario
	 * @return ningun valor
	 * @since 27 de enero del 2014
	 */
	public void updateDepartameno(departamentoBean registro) throws Exception {
		try {
			StringBuilder query = new StringBuilder();
			conn = this.getConnectionMYSQL();

			query.append("UPDATE Departamento SET ").append("departamento=''")
					.append(registro.getDepartamento()).append("','")
					.append("descripcion=''").append(registro.getDescripcion())
					.append("','").append(");");

			st = conn.createStatement();
			st.executeUpdate(query.toString());
			System.out
					.println("dao.departamento.updatedepartamento.Ejecutado-> "
							+ query.toString());
			System.out
					.println("dao.departamento.updatedepartamento--> actualizado");

		} catch (SQLException error) {
			throw new Exception(error.getMessage());
		} catch (Exception error) {
			throw new Exception(error.getMessage());
		} finally {
			close(conn);
			close(st);
		}
	}

	/**
	 * @author Men's
	 * @category Modulo Departamento Metodo para acambiar de estatus los
	 *           departamentos
	 * @param Bean
	 *            precargado con los datos actualizados del usuario
	 * @return ningun valor
	 * @since 27 de enero del 2014
	 */

	public void deleteDepartameno(int id) throws Exception {
		try {
			StringBuilder query = new StringBuilder();
			conn = this.getConnectionMYSQL();

			query.append("DELETE departamento from departamento where id_departamento='"+id+"'").append(");");

			st = conn.createStatement();
			st.executeUpdate(query.toString());
			System.out
					.println("dao.departamento.deletedepartamento.Ejecutado-> "
							+ query.toString());
			System.out
					.println("dao.departamento.deletedepartamento--> actualizado");

		} catch (SQLException error) {
			throw new Exception(error.getMessage());
		} catch (Exception error) {
			throw new Exception(error.getMessage());
		} finally {
			close(conn);
			close(st);
		}
	}

}